package model

import (
	"gorm.io/gorm"
	"time"
)

type DataEconomy struct {
	ID            int64  `json:"id" gorm:"id"`
	FtpInfoId     int64  `json:"ftp_info_id" gorm:"ftp_info_id"`     // ftp_info_id
	Date          string `json:"date" gorm:"date"`                   // 日期
	Time          string `json:"time" gorm:"time"`                   // 时间
	LogTime       int64  `json:"log_time" gorm:"log_time"`           // log_time
	SteamId       string `json:"steam_id" gorm:"steam_id"`           // 时间
	GameId        string `json:"game_id" gorm:"game_id"`             // 游戏id
	GameName      string `json:"game_name" gorm:"game_name"`         // 游戏名称
	EventType     string `json:"event_type" gorm:"event_type"`       // 交易类型
	ItemName      string `json:"item_name" gorm:"item_name"`         // 物品名称
	ItemNum       string `json:"item_num" gorm:"item_num"`           // 物品数量
	Price         string `json:"price" gorm:"price"`                 // 价格
	GoodsJson     string `json:"goods_json" gorm:"goods_json"`       // 交易物品数据
	StartBalance  string `json:"start_balance" gorm:"start_balance"` // 交易前余额
	StartGold     string `json:"start_gold" gorm:"start_gold"`       // 交易前金条
	StartMoney    string `json:"start_money" gorm:"start_money"`     // 交易前手上现金
	EndBalance    string `json:"end_balance" gorm:"end_balance"`     // 交易后余额
	EndGold       string `json:"end_gold" gorm:"end_gold"`           // 交易后金条
	EndMoney      string `json:"end_money" gorm:"end_money"`         // 交易后手上现金
	Area          string `json:"area" gorm:"area"`                   // 交易地区
	Trader        string `json:"trader" gorm:"trader"`               // 交易员
	TraderBalance string `json:"traderBalance" gorm:"traderBalance"` // 存款余额
	TraderAccount string `json:"traderAccount" gorm:"traderAccount"` // 账户金条
	OnlineNum     int64  `json:"online_num" gorm:"online_num"`       // 在线人数
	Balance       string `json:"balance" gorm:"balance"`             // 存款余额
	Gold          string `json:"gold" gorm:"gold"`                   // 账户金条
	HadCash       string `json:"hadCash" gorm:"hadCash"`             // 账户金条
	Location      string `json:"location" gorm:"location"`           // 领地旗所在位置
	UpdatedAt     int64  `json:"updated_at" gorm:"updated_at"`       // 修改时间
	CreatedAt     int64  `json:"created_at" gorm:"created_at"`       // 添加时间
}

func (DataEconomy) TableName() string {
	return "sm_data_economy"
}

func (u DataEconomy) BeforeUpdate(tx *gorm.DB) (err error) {
	now := time.Now()
	unixTime := now.Unix()
	u.UpdatedAt = unixTime
	u.CreatedAt = unixTime
	return nil
}

type DataEconomyM struct {
	DB *gorm.DB
}

func NewDataEconomyM() *DataEconomyM {
	return &DataEconomyM{
		GetDB(),
	}
}

func (c *DataEconomyM) InsertDataEconomy(DataArr []DataEconomy) bool {

	result := c.DB.Omit("id").CreateInBatches(DataArr, 1000)

	if result.Error != nil {
		panic(result.Error)
	}
	return true
}

// 获取用户交易数据
func (p *DataEconomyM) GetUserEconomyData(ftpInfoId int64) []DataEconomy {
	var data []DataEconomy

	query := p.DB.Model(DataEconomy{}).Select("steam_id, max(id) as id").Where("ftp_info_id = ?", ftpInfoId).Group("steam_id")

	result := p.DB.Debug().Model(DataEconomy{}).Joins("join (?) q on sm_data_economy.id = q.id", query).Find(&data)
	//fmt.Print("info", data)
	if result.Error != nil {
		panic(result.Error)
	}
	return data
}
